Skip to content

chore: enable React Compiler in Vitest for all plugins - #1852

Open
stipsan wants to merge 2 commits into
mainfrom
cursor/react-compiler-vitest-parity-b3de
Open

chore: enable React Compiler in Vitest for all plugins#1852
stipsan wants to merge 2 commits into
mainfrom
cursor/react-compiler-vitest-parity-b3de

Conversation

@stipsan

@stipsan stipsan commented Aug 6, 2026

Copy link
Copy Markdown
Member

Summary

Makes React Compiler in Vitest a hard invariant with tsdown.config.ts, so unit tests exercise the same compiled output as published builds (the gap that forced the late Vitest opt-in in #1841 for sanity-plugin-media).

Changes

  1. Generatorsvitest.config.ts.hbs and package.json.hbs always wire @rolldown/plugin-babel + reactCompilerPreset (matching reactCompiler: true in tsdown).
  2. Catalog@rolldown/plugin-babel and @vitejs/plugin-react added to the default catalog.
  3. Backfill — all 47 plugins with reactCompiler: true in tsdown now mirror it in Vitest (skipped @sanity/debug-preview-url-secret-plugin, which has no RC).
  4. CI enforcementscripts/react-compiler-parity fails pnpm test if the two configs drift.
  5. Agent docsAGENTS.md + plugin-test-coverage / plugin-transfer / migrate / styling skills document the invariant.

No changesets — Vitest/devDependency-only; published runtime is unchanged.

Test plan

  • pnpm format && pnpm lint && pnpm knip && pnpm build && pnpm test run (1282 tests passed)
  • Confirm scripts/react-compiler-parity passes
  • Spot-check a VE plugin and sanity-plugin-media Vitest configs compose babel + existing plugins
Open in Web Open in Cursor 

Mirror tsdown `reactCompiler: true` in vitest.config.ts via the same
@rolldown/plugin-babel + reactCompilerPreset stack, update generators,
document the invariant for agents, and add a CI parity check so it
cannot be forgotten.
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
plugins-studio Ready Ready Preview Aug 6, 2026 8:52am
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
plugins-e2e-test-studio Ignored Ignored Aug 6, 2026 8:52am

Request Review

@stipsan stipsan added the 🤖 bot label Aug 6, 2026 — with Cursor
@changeset-bot

changeset-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: cf9cc70

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

✅ E2E Tests

🟢 26 passedview full reportview run

Studio: https://plugins-e2e-test-studio-n5stghes2.sanity.dev

Datasets: pr-1852-chromium-31086630559, pr-1852-firefox-31086630559

@socket-security

socket-security Bot commented Aug 6, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 33.1% 6141 / 18551
🔵 Statements 33.54% 7409 / 22090
🔵 Functions 26.64% 1352 / 5074
🔵 Branches 26.04% 4186 / 16071
File CoverageNo changed files found.
Generated in workflow #8781 for commit cf9cc70 by the Vitest Coverage Report Action

@stipsan
stipsan marked this pull request as ready for review August 7, 2026 08:39
@stipsan
stipsan requested a review from a team as a code owner August 7, 2026 08:39
Copilot AI review requested due to automatic review settings August 7, 2026 08:39
@stipsan
stipsan requested review from a team as code owners August 7, 2026 08:39
@stipsan
stipsan requested review from pedrobonamin and removed request for a team August 7, 2026 08:39
@stipsan
stipsan enabled auto-merge (squash) August 7, 2026 08:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Enforces React Compiler parity between tsdown.config.ts and vitest.config.ts across the plugins monorepo, so unit tests run against the same compiled output as published builds.

Changes:

  • Update plugin generators (Vitest + package templates) to always wire @rolldown/plugin-babel + reactCompilerPreset, mirroring reactCompiler: true in tsdown.config.ts.
  • Add a new scripts/react-compiler-parity Vitest project that fails CI/tests if compiler parity drifts.
  • Backfill existing plugins’ vitest.config.ts and package.json devDependencies, and document the invariant in agent/skill docs.

Reviewed changes

Copilot reviewed 106 out of 107 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
turbo/generators/templates/vitest.config.ts.hbs Generator now emits RC-aware Vitest config (Babel + preset) and composes with vanilla-extract when present.
turbo/generators/templates/package.json.hbs Generator now includes @rolldown/plugin-babel + @vitejs/plugin-react as devDependencies (catalog).
turbo/generators/templates/README.todo.md.hbs Generator README guidance calls out keeping tsdown/vitest RC wiring in sync.
scripts/react-compiler-parity/package.json New workspace test package for enforcing RC parity.
scripts/react-compiler-parity/vitest.config.ts Vitest config for parity project (node environment).
scripts/react-compiler-parity/react-compiler-parity.test.ts Parity test that scans plugins and asserts Vitest RC wiring when tsdown enables RC.
pnpm-workspace.yaml Adds @rolldown/plugin-babel and @vitejs/plugin-react to the default catalog.
pnpm-lock.yaml Locks new catalog deps and updates workspace dependency graph (also includes a sanity@next resolution bump).
AGENTS.md Documents the “React Compiler Vitest parity” invariant and references enforcement script.
.agents/skills/sanity-plugin-best-practices/references/styling.md Updates vanilla-extract Vitest examples to preserve RC Babel plugin composition.
.agents/skills/plugin-transfer/SKILL.md Transfer guidance now calls out keeping RC parity in Vitest/tsdown.
.agents/skills/plugin-test-coverage/SKILL.md Testing guidance now includes RC parity requirement and enforcement.
.agents/skills/migrate-styled-components-to-vanilla-extract/SKILL.md Migration checklist updated to keep RC Babel plugin while adding vanilla-extract plugin.
plugins/@sanity/assist/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/assist/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/block-insert-picker/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/block-insert-picker/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/code-input/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/code-input/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/color-input/vitest.config.ts Enables RC Babel stack in Vitest and composes with vanilla-extract plugin.
plugins/@sanity/color-input/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/cross-dataset-duplicator/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/cross-dataset-duplicator/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/dashboard/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/dashboard/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/debug-live-sync-tags/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/debug-live-sync-tags/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/document-internationalization/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/document-internationalization/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/embeddings-index-ui/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/embeddings-index-ui/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/form-toolkit/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/form-toolkit/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/google-maps-input/vitest.config.ts Enables RC Babel stack in Vitest and composes with vanilla-extract plugin.
plugins/@sanity/google-maps-input/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/hierarchical-document-list/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/hierarchical-document-list/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/language-filter/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/language-filter/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/orderable-document-list/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/orderable-document-list/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/personalization-plugin/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/personalization-plugin/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/presets/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/presets/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/rich-date-input/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/rich-date-input/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/sanity-plugin-async-list/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/sanity-plugin-async-list/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/sfcc/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/sfcc/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/studio-secrets/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/studio-secrets/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/table/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/table/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/@sanity/vercel-protection-bypass/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/@sanity/vercel-protection-bypass/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-naive-html-serializer/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-naive-html-serializer/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-aprimo/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-aprimo/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-asset-source-unsplash/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-asset-source-unsplash/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-bynder-input/vitest.config.ts Enables RC Babel stack in Vitest and composes with vanilla-extract plugin.
plugins/sanity-plugin-bynder-input/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-cloudinary/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-cloudinary/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-dashboard-widget-document-list/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-dashboard-widget-document-list/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-dashboard-widget-netlify/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-dashboard-widget-netlify/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-dashboard-widget-vercel/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-dashboard-widget-vercel/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-documents-pane/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-documents-pane/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-graph-view/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-graph-view/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-google-translate/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-google-translate/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-hotspot-array/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-hotspot-array/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-iframe-pane/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-iframe-pane/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-internationalized-array/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-internationalized-array/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-latex-input/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-latex-input/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-markdown/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-markdown/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-media/vitest.config.ts Ensures Vitest runs with RC Babel stack for this plugin.
plugins/sanity-plugin-media/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-mux-input/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-mux-input/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-studio-smartling/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-studio-smartling/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-transifex/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-transifex/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-utils/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-utils/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-workflow/vitest.config.ts Enables RC Babel stack in Vitest and composes with vanilla-extract plugin.
plugins/sanity-plugin-workflow/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-workspace-home/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-workspace-home/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-plugin-shopify-assets/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-plugin-shopify-assets/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).
plugins/sanity-translations-tab/vitest.config.ts Enables RC Babel stack in Vitest for this plugin.
plugins/sanity-translations-tab/package.json Adds @rolldown/plugin-babel + @vitejs/plugin-react devDependencies (catalog).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +62 to +66
function enablesReactCompilerInVitest(vitestSource: string): boolean {
return (
vitestSource.includes('reactCompilerPreset') || vitestSource.includes('@rolldown/plugin-babel')
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants